package houserent.view;
//界面层
import com.sun.security.jgss.GSSUtil;
import houserent.service.HouseService;
import houserent.utils.Utility;
import houserent.domain.House;

/*
    1.显示主菜单
    2.接受用户输入
    3.调用HouseService完成对房屋信息的各种操作
 */
public class HouseView {

    //属性
    private boolean loop = true;    //控制显示菜单
    private char key = ' ';  //接收用户选择的是那个菜单
    private HouseService houseService = new HouseService(10);   //假定设置数组的大小为10

    //根据id修改房屋信息
    public void update(){
        System.out.println("---------------修改房屋信息---------------");
        System.out.println("请输入需要修改房屋的编号：(-1表示退出)");
        int updateId = Utility.readInt();
        if(updateId == -1){
            System.out.println("你放弃了修改房屋信息！！");
            return;
        }
        //根据输入得到updateId,查找对象
        House house = houseService.findByid(updateId);   //注意：返回的是引用类型[即：就是数组的元素]
        if(house == null){
            System.out.println("房屋不存在！！");
            return;
        }

        //特别提示：返回的是引用类型[即：就是数组的元素]
        //因此在后面对house.setXxx(),就会修改HouseService中数组的元素
        //修改姓名
        System.out.println("姓名("+house.getName()+"):");
        String name = Utility.readString(8,"");     //这里如果用户直接回车表示不修改该信息，默认""
        if(name !=""){
            house.setName(name);
        }
        //修改电话
        System.out.println("电话("+house.getPhone()+"):");
        String phone = Utility.readString(12,"");
        if(phone !=""){
            house.setPhone(phone);
        }
        //修改地址
        System.out.println("地址("+house.getAddress()+"):");
        String address = Utility.readString(12,"");
        if(address !=""){
            house.setAddress(address);
        }
        //修改月租金
        System.out.println("租金("+house.getRent()+"):");
        int rent = Utility.readInt(-1);
        if(rent != -1){
            house.setRent(rent);
        }
        //修改状态
        System.out.println("状态("+house.getState()+"):");
        String state = Utility.readString(3,"");
        if(!"".equals(state)){
            house.setState(state);
        }
        System.out.println("房屋信息修改成功！！");
    }

    //根据id查找房屋信息
    public void findHouse(){
        System.out.println("---------------查找房屋信息---------------");
        System.out.print("请输入要查找的id:");
        int findId = Utility.readInt();
        //调用业务层的方法
        House house = houseService.findByid(findId);
        if(house !=null){
            System.out.println(house);
        }else{
            System.out.println("房屋不存在！！");
        }
    }

    //完成退出却确认
    public void exit(){
        //这里使用Utility提供的方法，完成确认
        char c = Utility.readConfirmSelection();
        if(c=='Y'){
            loop = false;
        }
    }

    //编写delHouse() 接受输入的id，调用Service的del方法
    public void delHouse(){
        System.out.println("---------------删除房屋---------------");
        System.out.println("请输入待删除房屋的编号：(-1表示退出)");
        int delId = Utility.readInt();
        if(delId == -1){  //表示放弃删除
            System.out.println("---------------放弃删除房屋---------------");
            return;
        }
       //Utility.readConfirmSelection();这里面已经包含提示
        char choice = Utility.readConfirmSelection();//注意该方法本就有循环判断的逻辑，不输入正确，出不来
        if(choice =='Y'){
            if(houseService.del(delId)){
                System.out.println("---------------删除房屋成功！！---------------");
            }else{
                System.out.println("---------------房屋编号不存在删除失败！！---------------");
            }
        }else{
            System.out.println("---------------放弃删除房屋---------------");
        }
    }

    //编写addHouse() 接受输入创建House对象，调用add方法
    public void  addHouse(){
        System.out.println("---------------添加房屋---------------");
        System.out.println("姓名：");
        String name = Utility.readString(8);
        System.out.println("电话：");
        String phone = Utility.readString(12);
        System.out.println("地址：");
        String address = Utility.readString(16);
        System.out.println("月租：");
        int rent = Utility.readInt();
        System.out.println("状态(出租或未出租)：");
        String state = Utility.readString(3);
        //得到这些属性后可以创建新的House对象,注意id是系统分配的，用户不能输入
        House house = new House(0, name, phone, address, rent, state);
        if(houseService.addd(house)){
            System.out.println("房屋添加成功！！");
        }else{
            System.out.println("添加失败！！");
        }
    }

    //编写listHouses()显示房屋列表
    public void listHouse(){
        System.out.println("---------------房屋列表---------------");
        System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(未出租/已出租)");
        House[] houses = houseService.list();   //得到所有的房屋信息
        for(int i=0;i<houses.length;i++){
            if(houses[i] == null){  //不显示空的
                break;
            }
            System.out.println(houses[i]);
        }
        System.out.println("---------------房屋列表显示完毕---------------\n");
    }

    //显示主菜单
    public void mainMenu(){

        do{
            System.out.println("---------------房屋出租系统菜单---------------");
            System.out.println("\t"+"\t"+"\t"+"\t"+"1 新 增 房 源");
            System.out.println("\t"+"\t"+"\t"+"\t"+"2 查 找 房 屋");
            System.out.println("\t"+"\t"+"\t"+"\t"+"3 删 除 房 屋");
            System.out.println("\t"+"\t"+"\t"+"\t"+"4 修 改 房 屋 信 息");
            System.out.println("\t"+"\t"+"\t"+"\t"+"5 显 示 房 屋 列 表");
            System.out.println("\t"+"\t"+"\t"+"\t"+"6 退       出");
            System.out.println("请输入你的选择(1-6)");

            key = Utility.readChar();
            switch(key){
                case '1':
                    this.addHouse();
                    break;
                case '2':
                    this.findHouse();
                    break;
                case '3':
                    this.delHouse();
                    break;
                case'4':
                    this.update();
                    break;
                case'5':
                    this.listHouse();
                    break;
                case'6':
                    this.exit();
                    break;
                default:
                    System.out.println("输出误，请重新输入");
            }
        }while(loop);
    }

    //显示房屋列表
}
